import java.util.Stack;

class Solution {
    public static int calculate(String s) {
        int n = s.length(), i = 0;
        char[] strs = s.toCharArray();
        Stack<Integer> stack = new Stack<>();
        char op = '+'; // 初始化为'+'
        while (i < n) {
            // 排除空格的情况
            while (i < n && strs[i] == ' ') { // 避免越界
                i++;
            }
            if (i == n) {
                break;
            }
            // 处理数字
            if (i < n && strs[i] >= '0' && strs[i] <= '9') {
                // 先拿到完整的数字
                int num = 0;
                while (i < n && strs[i] >= '0' && strs[i] <= '9') {
                    num = num * 10 + (strs[i] - '0');
                    i++;
                }
                // 根据运算符的情况，将不同情况的数据入栈
                if (op == '+') { // 加上数据
                    stack.push(num);
                } else if (op == '-') { // 减去数据
                    stack.push(-num);
                } else if (op == '*') { // 让栈顶的数据乘上该数据
                    stack.push(stack.pop() * num);
                } else { // 让栈顶的数据除去该数据
                    stack.push(stack.pop() / num);
                }
                // 处理完上述不需要 i++，因为上述刚好将i+1的位置确认为非数字，但未处理
            } else {
                // 处理运算符
                op = strs[i];
                i++;
            }
        }
        // 将栈中所有元素相加即可
        int ret = 0;
        while (!stack.isEmpty()) {
            ret += stack.pop();
        }
        return ret;
    }

    public static void main(String[] args) {
        System.out.println(calculate("42"));
    }
}
